<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>Cap&iacute;tulo 3. Elementos b&aacute;sicos</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="Parte_2.html" title="Parte&nbsp;II.&nbsp;Elementos de gvHidra">
      <link rel="prev" href="Parte_2.html" title="Parte&nbsp;II.&nbsp;Elementos de gvHidra">
      <link rel="next" href="ch03s02.html" title="3.2. Breve gu&iacute;a para crear una pantalla">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">Cap&iacute;tulo 3. Elementos b&aacute;sicos</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="Parte_2.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Parte&nbsp;II.&nbsp;Elementos de gvHidra</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="chapter" title="Cap&iacute;tulo 3. Elementos b&aacute;sicos">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title"><a name="d4e773"></a>Cap&iacute;tulo 3. Elementos b&aacute;sicos
                  </h2>
               </div>
            </div>
         </div>
         <div class="toc">
            <p><b>Tabla de contenidos</b></p>
            <dl>
               <dt><span class="section"><a href="ch03.html#d4e775">3.1. Estructura de aplicaci&oacute;n</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03.html#d4e808">3.1.1. Configuraci&oacute;n est&aacute;tica: gvHidraConfig.xml</a></span></dt>
                     <dt><span class="section"><a href="ch03.html#d4e929">3.1.2. Configuraci&oacute;n din&aacute;mica: AppMainWindow</a></span></dt>
                     <dt><span class="section"><a href="ch03.html#d4e949">3.1.3. Recomendaciones</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s02.html">3.2. Breve gu&iacute;a para crear una pantalla</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s02.html#d4e1028">3.2.1. Introducci&oacute;n</a></span></dt>
                     <dt><span class="section"><a href="ch03s02.html#d4e1107">3.2.2. Genaro: Generaci&oacute;n autom&aacute;tica en gvHidra</a></span></dt>
                     <dt><span class="section"><a href="ch03s02.html#d4e1216">3.2.3. Creaci&oacute;n de un mantenimiento de forma manual</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s03.html">3.3. Men&uacute; de una aplicaci&oacute;n</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s03.html#d4e1416">3.3.1. Funcionamiento del men&uacute;</a></span></dt>
                     <dt><span class="section"><a href="ch03s03.html#d4e1585">3.3.2. Opciones predefinidas para el menu</a></span></dt>
                     <dt><span class="section"><a href="ch03s03.html#d4e1606">3.3.3. Autenticaci&oacute;n y autorizaci&oacute;n (m&oacute;dulos y roles)</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s04.html">3.4. Dise&ntilde;o de pantalla con smarty/plugins</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s04.html#d4e1768">3.4.1. &iquest;Qu&eacute; es un <span class="emphasis"><em>template</em></span>?</a></span></dt>
                     <dt><span class="section"><a href="ch03s04.html#d4e1774">3.4.2. C&oacute;mo realizar un <span class="emphasis"><em>template</em></span> (tpl)</a></span></dt>
                     <dt><span class="section"><a href="ch03s04.html#d4e1945">3.4.3. Documentaci&oacute;n de los plugins</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s05.html">3.5. C&oacute;digo de la l&oacute;gica de negocio</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s05.html#d4e1953">3.5.1. Operaciones y m&eacute;todos virtuales</a></span></dt>
                     <dt><span class="section"><a href="ch03s05.html#d4e2268">3.5.2. Uso del panel de b&uacute;squeda</a></span></dt>
                     <dt><span class="section"><a href="ch03s05.html#d4e2370">3.5.3. Acciones no gen&eacute;ricas</a></span></dt>
                     <dt><span class="section"><a href="ch03s05.html#d4e2449">3.5.4. Acciones de interfaz</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s06.html">3.6. Personalizando el estilo</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s06.html#d4e2548">3.6.1. CSS</a></span></dt>
                     <dt><span class="section"><a href="ch03s06.html#d4e2555">3.6.2. Im&aacute;genes</a></span></dt>
                     <dt><span class="section"><a href="ch03s06.html#d4e2593">3.6.3. Ficheros de configuraci&oacute;n del custom</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s07.html">3.7. Tratamiento de tipos de datos</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s07.html#d4e2621">3.7.1. Caracter&iacute;sticas generales</a></span></dt>
                     <dt><span class="section"><a href="ch03s07.html#d4e2670">3.7.2. Cadenas (gvHidraString)</a></span></dt>
                     <dt><span class="section"><a href="ch03s07.html#d4e2730">3.7.3. Fechas</a></span></dt>
                     <dt><span class="section"><a href="ch03s07.html#d4e2863">3.7.4. N&uacute;meros</a></span></dt>
                     <dt><span class="section"><a href="ch03s07.html#d4e2916">3.7.5. Creaci&oacute;n de nuevos tipos de datos</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s08.html">3.8. Listas de datos sencillas</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s08.html#d4e2923">3.8.1. Listas</a></span></dt>
                     <dt><span class="section"><a href="ch03s08.html#d4e3155">3.8.2. Checkbox</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s09.html">3.9. Mensajes y Errores</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch03s09.html#d4e3242">3.9.1. Invocaci&oacute;n desde c&oacute;digo</a></span></dt>
                     <dt><span class="section"><a href="ch03s09.html#d4e3256">3.9.2. Invocaci&oacute;n como confirmaci&oacute;n</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch03s10.html">3.10. Uso de datos por defecto</a></span></dt>
            </dl>
         </div>
           
         
           
         <div class="section" title="3.1. Estructura de aplicaci&oacute;n">
            <div class="titlepage">
               <div>
                  <div>
                     <h2 class="title" style="clear: both"><a name="d4e775"></a>3.1. Estructura de aplicaci&oacute;n
                     </h2>
                  </div>
               </div>
            </div>
                
            
                
            <p><a name="C3Basicos"></a>gvHIDRA, a parte de proporcionar un core (igep) en el
                   que se encuentran todas las funcionalidades extensibles del framework,
                   proporciona una estructura inicial de proyecto. Para empezar cualquier
                   aplicaci&oacute;n con la herramienta, debemos bajar la plantilla inicial de
                   proyecto correspondiente a la versi&oacute;n con la que vamos a trabajar. Esta
                   plantilla se encuentra en el paquete de la propia versi&oacute;n en la ubicaci&oacute;n
                   doc/plantilla-gvHidra.zip. Antes de descomprimir hay que advertir que los
                   ficheros est&aacute;n codificados en ISO-8859-1 o ISO-8859-15, por lo que hay que
                   tener precauci&oacute;n con usar alg&uacute;n editor que respete estas codificaciones.
                   Otro detalle a tener en cuenta es que la plantilla contiene ejemplos que
                   deben ser borrados.
            </p>
            
                
            <p>Una vez descomprimida encontramos una estructura b&aacute;sica de
                   aplicaci&oacute;n a partir de la cual construiremos nuestra aplicaci&oacute;n. De esta
                   estructura destacamos:
            </p>
            
                
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>gvHidraConfig.inc.xml</strong></span>: donde
                                a&ntilde;adir las conexiones a bases de datos, c&oacute;digo de la aplicaci&oacute;n y
                                versi&oacute;n,...
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>actions/principal/AppMainWindow.php</strong></span>: donde
                                a&ntilde;adiremos las listas y ventanas de selecci&oacute;n particulares, log,
                                ...
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>mensajes.php</strong></span>: donde a&ntilde;adir
                                mensajes particulares de la aplicaci&oacute;n.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>include/menuModulos.xml</strong></span>: define
                                el menu principal de la aplicaci&oacute;n. Hay que modificarlo con las
                                acciones propias de la aplicaci&oacute;n. Tambi&eacute;n podemos usar ciertas
                                opciones predefinidas.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>include/menuAdministracion.xml</strong></span>:
                                definimos opciones de la 2&ordf; columna de la pantalla principal. Siguen
                                las mismas normas que en menuModulos.xml.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>include/menuHerramientas.xml</strong></span>:
                                definimos opciones de la 3&ordf; columna de la pantalla principal. Siguen
                                las mismas normas que en menuModulos.xml.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>include/include.php</strong></span>: donde,
                                conforme vayamos creando clases de negocio las iremos incluyendo. Los
                                includes de ficheros "action/*" se pueden borrar.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>include/mappings.php</strong></span>: en la
                                funci&oacute;n ComponentesMap, excepto la llamada al constructor del padre,
                                todo se puede borrar.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p><span class="bold"><strong>templates_c</strong></span>: directorio de
                                compilaci&oacute;n de plantillas. El usuario web tiene que tener permisos de
                                escritura.
                     </p>
                           
                  </li>
               </ul>
            </div>
            
                
            <p>A esta estructura tenemos que a&ntilde;adirle el core del framework
                   correspondiente (directorio igep) que tambi&eacute;n se distribuye con la versi&oacute;n
                   de gvHIDRA.
            </p>
            
                
            <div class="section" title="3.1.1. Configuraci&oacute;n est&aacute;tica: gvHidraConfig.xml">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e808"></a>3.1.1. Configuraci&oacute;n est&aacute;tica: gvHidraConfig.xml
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p><a name="C3gvHidraConfig"></a>La configuraci&oacute;n b&aacute;sica de una aplicaci&oacute;n
                        gvHIDRA se concentra en los ficheros de configuraci&oacute;n gvHidraConfig.xml.
                        En este apartado explicaremos tanto la distribuci&oacute;n de estos ficheros
                        entre la arquitectura del framework como las posibilidades que ofrece.
                        Finalmente, veremos un ejemplo de un fichero tal y como se utiliza en
                        una aplicaci&oacute;n.
               </p>
               
                     
               <p>Aunque en algunos apartados se detalla mucha informaci&oacute;n, lo
                        realmente importante es entender el concepto general y la configuraci&oacute;n
                        m&iacute;nima que tenemos que realizar para crear una aplicaci&oacute;n (fichero a
                        nivel de aplicaci&oacute;n).
               </p>
               
                     
               <div class="section" title="3.1.1.1. Introducci&oacute;n">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e812"></a>3.1.1.1. Introducci&oacute;n
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>La configuraci&oacute;n b&aacute;sica de una aplicaci&oacute;n gvHIDRA se concentra
                             en los ficheros de configuraci&oacute;n <span class="bold"><strong>gvHidraConfig.xml</strong></span>. Estos ficheros de
                             configuraci&oacute;n (todos con el nombre mencionado) aparecer&aacute;n en tres
                             capas, una a nivel del framework (igep), otra a nivel de custom
                             (personalizaci&oacute;n de la organizaci&oacute;n) y finalmente, a nivel de
                             aplicaci&oacute;n. Por ejemplo, supongamos una aplicaci&oacute;n realizada con
                             gvHidra que se denomine "factur" y se encuentra dentro de la
                             organizaci&oacute;n "tecnimap" los ficheros de configuraci&oacute;n se ubicar&aacute;n en
                             las estructura de directorios como sigue:
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p>factur/igep/gvHidraConfig.inc.xml</p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>factur/igep/custom/tecnimap/gvHidraConfig.inc.xml</p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>factur/gvHidraConfig.inc.xml</p>
                                     
                        </li>
                     </ul>
                  </div>
                  
                          
                  <p>La sem&aacute;ntica de los ficheros XML vendr&aacute; determinada a trav&eacute;s de
                             la DTD embebida en ellos, para que a los encargados de editar y
                             mantener esos ficheros (programadores y responsables de la aplicaci&oacute;n
                             correspondiente) les sea sencillo saber si los mismos est&aacute;n
                             correctamente confeccionados. La finalidad de que existan distintos
                             ficheros de configuraci&oacute;n, es establecer una especializaci&oacute;n
                             jer&aacute;rquica, que permita personalizar opciones de gvHidra a distintos
                             niveles.
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p>Nivel de <span class="bold"><strong>framework</strong></span> (en el
                                          ejemplo anterior, fichero factur/igep/gvHidraConfig.inc.xml): En
                                          este fichero se establecer&aacute;n configuraciones generales del
                                          framework y OBLIGATORIAMENTE se establecer&aacute; el directorio de
                                          customizaci&oacute;n (customDirName).
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>Nivel de <span class="bold"><strong>organizaci&oacute;n</strong></span>
                                          (personalizaci&oacute;n o custom, en el ejemplo anterior es el fichero
                                          factur/igep/custom/tecnimap/gvHidraConfig.inc.xml): Es un fichero
                                          que incluir&aacute; elementos propios de la organizaci&oacute;n (DSNs de BDs,
                                          acciones particulares de validaci&oacute;n, ...), adem&aacute;s en este fichero
                                          podr&aacute; redefinirse cualquier valor establecido en el fichero a
                                          nivel de Framework.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>Nivel de <span class="bold"><strong>aplicaci&oacute;n</strong></span> (en el
                                          ejemplo anterior, fichero factur/gvHidraConfig.inc.xml): Utilizado
                                          para incluir configuraci&oacute;n espec&iacute;fica de una aplicaci&oacute;n (DSNs,
                                          versi&oacute;n...), como &uacute;ltimo en el nivel jer&aacute;rquico, a trav&eacute;s de &eacute;l se
                                          podr&aacute; redefinir cualquier valor establecido en el fichero a nivel
                                          de organizaci&oacute;n y de framework. Excepcionalmente, este fichero, se
                                          puede dividir en dos; ubicando parte de la configuraci&oacute;n fuera del
                                          &aacute;mbito del document_root por seguridad (ver m&aacute;s adelante propiedad
                                          extConfigDir).
                           </p>
                                     
                        </li>
                     </ul>
                  </div>
                  
                          
                  <p>Es decir, en &uacute;ltima instancia, las opciones que prevalecen son
                             las que aparecen en el fichero de configuraci&oacute;n de la aplicaci&oacute;n.
                             Posteriormente y a trav&eacute;s del objeto global (el singleton
                             ConfigFramework) podremos leer y sobrescribir din&aacute;micamente dichas
                             opciones.
                  </p>
                        
               </div>
               
                     
               <div class="section" title="3.1.1.2. Par&aacute;metros">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e835"></a>3.1.1.2. Par&aacute;metros
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>A continuaci&oacute;n vamos a detallar cada una de las opciones
                             disponibles para la confecci&oacute;n de los ficheros. Muchas de ellas no se
                             deber&aacute;n modificar al iniciar una aplicaci&oacute;n, pero convien que las
                             conozcamos:
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>applicationName</strong></span>: De
                                          car&aacute;cter obligatorio, establece el nombre (c&oacute;digo) de la
                                          aplicaci&oacute;n. La asignaci&oacute;n normal ser&aacute; en la ubicaci&oacute;n
                                          correspondiente a la aplicaci&oacute;n.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>appVersion</strong></span>: Versi&oacute;n de la
                                          aplicaci&oacute;n. La asignaci&oacute;n normal ser&aacute; en la ubicaci&oacute;n
                                          correspondiente al nivel de aplicaci&oacute;n.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>customTitle</strong></span>: En la barra
                                          superior de color azul, a la izquierda de la fecha y hora, se ha
                                          reservado un peque&ntilde;o espacio para poder incluir un texto
                                          personalizado. La asignaci&oacute;n se realiza a trav&eacute;s de este
                                          par&aacute;metro.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>customDirName</strong></span>: Establece el
                                          nombre del directorio de customizaci&oacute;n. En dicho directorio
                                          aparecen modificaciones o extensiones que van a ser comunes a una
                                          organizaci&oacute;n. Por ejemplo, las extensiones del Framework propias
                                          de la CIT (ventanas de selecci&oacute;n, listas predefinidas, DSNs de
                                          consulta a BDs internas...) se ubicar&aacute;n dentro de un directorio
                                          "cit.gva.es". La asignaci&oacute;n de este valor ser&aacute; en el fichero a
                                          nivel de framework o de la aplicaci&oacute;n, no pudi&eacute;ndose hacer a nivel
                                          de la organizaci&oacute;n ni de forma din&aacute;mica usando el objeto
                                          global.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>temporalDir</strong></span>: Permite
                                          indicar una carpeta para la creaci&oacute;n de algunos temporales
                                          relacionados con la seguridad (fichero de sesi&oacute;n, ...). La
                                          asignaci&oacute;n de este valor ser&aacute; s&oacute;lo en el fichero a nivel de la
                                          aplicaci&oacute;n, no pudi&eacute;ndose hacer a nivel de framework ni de la
                                          organizaci&oacute;n ni de forma din&aacute;mica usando el objeto global.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>templatesCompilationDir</strong></span>:
                                          Establece el directorio que utilizar&aacute; Smarty para compilar las
                                          TPL. Si se est&aacute; desarrollando alg&uacute;n plugin del framework, es
                                          interesante cambiar la configuraci&oacute;n para que cada "usuario" tenga
                                          su carpeta y no haya un efecto cach&eacute; mientras se
                                          desarrolla.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>reloadMappings</strong></span>: Indica si
                                          se quiere recargar el fichero de mappings en cada petici&oacute;n. Por
                                          defecto est&aacute; habilitado, aunque habria que deshabilitarlo para
                                          entornos donde el fichero de mappings no se modifica. Este
                                          par&aacute;metro se puede definir a cualquier nivel.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>smartyCompileCheck</strong></span>: Indica
                                          si smarty tiene que comprobar si se ha modificado alguna plantilla
                                          y en caso afirmativo recargarla. Se puede definir en cualquiera de
                                          los tres xml, aunque no de forma din&aacute;mica.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>logSettings</strong></span>: Establece el
                                          nivel de detalle de los registros de auditor&iacute;a.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>extConfigDir</strong></span>: Permite
                                          definir una ubicaci&oacute;n externa del fichero de configuraci&oacute;n de la
                                          aplicaci&oacute;n. &Uacute;til para, por ejemplo, ubicar los ficheros de
                                          configuraci&oacute;n de acceso fuera del Document_Root.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>queryMode</strong></span>: Modo de
                                          interrogar las BDs, vease los filtros de b&uacute;squeda.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="bold"><strong>DSNZone</strong></span>: Encerrada en esta
                                          etiqueta aparecer&aacute; toda la informaci&oacute;n relativa a las fuentes de
                                          datos. La etiqueta podr&aacute; aparecer en las tres ubicaciones, por
                                          ejemplo: a nivel de framework para establecer la configuraci&oacute;n del
                                          DSN del log, a nivel de organizaci&oacute;n para incluir DSNs propios de
                                          la organizaci&oacute;n (listas y ventanas de selecci&oacute;n propias,
                                          validaciones...) y finalmente, a nivel de aplicaci&oacute;n, donde
                                          situaremos la informaci&oacute;n de conexi&oacute;n propia.
                           </p>
                           
                                       
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">
                                                    
                                    <p><span class="bold"><strong>dbDSN</strong></span>: Agrupa los
                                                       par&aacute;metros de conexi&oacute;n a un SGBD relacional. Las etiquetas
                                                       est&aacute;n inspiradas en PEAR:MDB2.
                                    </p>
                                    
                                                    
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>dbHost</em></span>: Host o IP donde se
                                                                    encuentra el servicio. En el caso de conexi&oacute;nes a Oracle
                                                                    mediante OCI (cuando sgbd vale oracle, oci, oci8) se
                                                                    utilizar&aacute; para establecer la entrada en tnsnames. Para los
                                                                    otros casos de oracle (thin y oracle-thin) debemos
                                                                    especificar dbHost, dbPort y dbDatabase.
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>dbPort</em></span>: Puerto donde escucha el
                                                                    SGBD.
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>dbDatabase</em></span>: Base de datos a la
                                                                    que nos conectamos.
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>dbUser</em></span>: Usuario.
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>dbPassword</em></span>: Contrase&ntilde;a.
                                             </p>
                                                               
                                          </li>
                                       </ul>
                                    </div>
                                                  
                                 </li>
                                 <li class="listitem">
                                                    
                                    <p><span class="bold"><strong>wsDSN</strong></span>: La fuente de
                                                       datos es un servicio web.
                                    </p>
                                    
                                                    
                                    <div class="itemizedlist">
                                       <ul class="itemizedlist" type="square">
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>uriWSDL</em></span>: URI donde puede
                                                                    localizarse el fichero WSDL que define el servicio web
                                                                    SOAP.
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>wsUser</em></span>: Usuario
                                             </p>
                                                               
                                          </li>
                                          <li class="listitem">
                                                                 
                                             <p><span class="emphasis"><em>wsPassword</em></span>: Contrase&ntilde;a
                                             </p>
                                                               
                                          </li>
                                       </ul>
                                    </div>
                                                  
                                 </li>
                              </ul>
                           </div>
                                     
                        </li>
                     </ul>
                  </div>
                        
               </div>
               
                     
               <div class="section" title="3.1.1.3. Ejemplo a nivel aplicaci&oacute;n.">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e908"></a>3.1.1.3. Ejemplo a nivel aplicaci&oacute;n.
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Despu&eacute;s de esta abalancha de par&aacute;metros, para comprender mejor
                             su utilizaci&oacute;n vamos a ver un ejemplo real de un fichero a nivel de
                             aplicaci&oacute;n:
                  </p>
                  
                          
                  <div class="informalexample">
                               
                     
                               <pre class="programlisting">&lt;gvHidraConfig&gt;
 &middot;&middot;&middot;
   &lt;applicationName&gt;factur&lt;/applicationName&gt;
   &lt;appVersion&gt;1.0.0&lt;/appVersion&gt;
   &lt;!-- si es a nivel de organizacion, puede estar definido en el del custom--&gt;
   &lt;logSettings status='LOG_ALL' dnsRef='gvh_dsn_log' /&gt;

   &lt;DSNZone&gt;
      &lt;dbDSN id='gvh_dsn_log' sgbd='postgres'&gt;
         &lt;dbHost&gt;cualquiera.coput.gva.es&lt;/dbHost&gt;
         &lt;dbPort&gt;5432&lt;/dbPort&gt;
         &lt;dbDatabase&gt;saturno&lt;/dbDatabase&gt;
         &lt;dbUser&gt;logUser&lt;/dbUser&gt;
         &lt;dbPassword&gt;melogeo&lt;/dbPassword&gt;
      &lt;/dbDSN&gt;

      &lt;dbDSN id='ora-tns' sgbd='oracle'&gt;
         &lt;dbHost&gt;tns-entry&lt;/dbHost&gt;
         &lt;dbUser&gt;usuario&lt;/dbUser&gt;
         &lt;dbPassword&gt;pwd&lt;/dbPassword&gt;
      &lt;/dbDSN&gt;

      &lt;dbDSN id='ora-thin' sgbd='oracle-thin'&gt;
         &lt;dbHost&gt;bd.coput.gva.es&lt;/dbHost&gt;
         &lt;dbPort&gt;1521&lt;/dbPort&gt;
         &lt;dbDatabase&gt;sid&lt;/dbDatabase&gt;
         &lt;dbUser&gt;usuario&lt;/dbUser&gt;
         &lt;dbPassword&gt;pwd&lt;/dbPassword&gt;
      &lt;/dbDSN&gt;

      &lt;wsDSN id='g_ws'&gt;
         &lt;wsUser&gt;wsuser&lt;/wsUser&gt;
         &lt;wsPassword&gt;wspwd&lt;/wsPassword&gt;
      &lt;/wsDSN&gt;
   &lt;/DSNZone&gt;
&middot;&middot;&middot;
&lt;/gvHidraConfig&gt;</pre>
                             </div>
                  
                          
                  <p>Como nota, debemos saber que podemos acceder con la clase
                             ConfigFramework a los metodos get/set para acceder/modificar estas
                             propiedades. Ejemplo:
                  </p>
                  
                          
                  <div class="informalexample">
                               
                     
                               <pre class="programlisting">$conf = ConfigFramework::getConfig();
$cod_apli = $conf-&gt;getApplicationName();
$conf-&gt;setCustomTitle('Tu t&iacute;tulo');</pre>
                             </div>
                        
               </div>
               
                     
               <div class="section" title="3.1.1.4. Recomendaciones">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e916"></a>3.1.1.4. Recomendaciones
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Hay que tener en cuenta que, dependiendo del entorno en el que
                             estemos trabajando, puede que nos interese habilitar/deshabilitar
                             ciertos par&aacute;metros de configuraci&oacute;n. T&iacute;picamente, nos encontramos con
                             el caso de entornos de producci&oacute;n, en estos casos interesa:
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p><span class="emphasis"><em>smartyCompileCheck</em></span>: en producci&oacute;n es
                                          interesante tener este valor a false para optimizar el rendimiento
                                          de nuestras aplicaciones. Con ellos aprovecharemos la cache del
                                          Smarty.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="emphasis"><em>reloadMappings</em></span>: en producci&oacute;n es
                                          interesante tener este valor a false para evitar que recarge el
                                          cat&aacute;logo de acciones en cada ejecuci&oacute;n. Esto aumentar&aacute; la
                                          velocidad de nuestras aplicaciones.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p><span class="emphasis"><em>extConfigDir</em></span>: dependiendo de la
                                          configuraci&oacute;n del entorno y los sistemas de despliegue, puede ser
                                          interesante ubicar el fichero de configuraci&oacute;n de la aplicaci&oacute;n en
                                          una ubicaci&oacute;n diferente al ra&iacute;z de la aplicaci&oacute;n. Si es este el
                                          caso, debes utilizar esta propiedad.
                           </p>
                                     
                        </li>
                     </ul>
                  </div>
                        
               </div>
                   
            </div>
            
                
            <div class="section" title="3.1.2. Configuraci&oacute;n din&aacute;mica: AppMainWindow">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e929"></a>3.1.2. Configuraci&oacute;n din&aacute;mica: AppMainWindow
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>Esta clase es propia de cada proyecto, y se crea para inicializar
                        caracteristicas generales de la aplicaci&oacute;n. Como se ha explicado en los
                        puntos anteriores, supone entre otras cosas, la carga din&aacute;mica de
                        par&aacute;metros de configuraci&oacute;n. Este fichero no es obligatorio; aunque en
                        la pr&aacute;ctica podemos decir que en el 100% de los casos es
                        necesario.
               </p>
               
                     
               <p>Es importante tener en cuenta que, por su definici&oacute;n, s&oacute;lo se
                        ejecutar&aacute; la primera vez que entremos en la aplicaci&oacute;n. A continuaci&oacute;n
                        describimos algunas de las funcionalidades que nos permite hacer.
               </p>
               
                     
               <div class="section" title="3.1.2.1. Carga din&aacute;mica.">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e933"></a>3.1.2.1. Carga din&aacute;mica.
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>B&aacute;sicamente, la carga din&aacute;mica. Si no definimos esta clase, los
                             valores de configuraci&oacute;n seran los definidos en los ficheros
                             gvHidraConfig.inc.xml. Sin embargo, cuando necesitamos fijar alguno de
                             estos par&aacute;metros en funcion de situaciones m&aacute;s complejas (informaci&oacute;n
                             propia al usuario, al estado de la aplicaci&oacute;n, al entorno de
                             ejecuci&oacute;n, ...), podemos usar los 'setters' de los par&aacute;metros para
                             cambiar la configuraci&oacute;n. Por ejemplo:
                  </p>
                  
                          
                  <div class="informalexample">
                               
                     
                               <pre class="programlisting">$conf = ConfigFramework::getConfig();

// aumentar nivel de log en desarrollo
if ($estoyEnDesarrollo()) {
    // Cuando estamos en desarrollo registramos todos los movimientos
    $conf-&gt;setLogStatus(LOG_ALL);
}

// mostrar cierta informacion solo para perfil informaticos
if (IgepSession::dameRol()=='R_INFORMATICOS')
    $conf-&gt;setCustomTitle('perfil-admin');</pre>
                             </div>
                        
               </div>
               
                     
               <div class="section" title="3.1.2.2. Acciones particulares al abrir o cerrar la aplicaci&oacute;n">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e938"></a>3.1.2.2. Acciones particulares al abrir o cerrar la aplicaci&oacute;n
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Cuando queremos hacer algo al empezar o terminar la aplicacion,
                             la definici&oacute;n de esta clase nos permite acceder a estas acciones
                             espec&iacute;ficas. Vease el ejemplo en el punto "C&oacute;digo de la l&oacute;gica de
                             negocio". Para ello hay que a&ntilde;adir al mappings.php las siguientes
                             l&iacute;neas:
                  </p>
                  
                          
                  <div class="informalexample">
                               
                     
                               <pre class="programlisting">//Accion que se ejecuta al abrir la aplicacion
$this-&gt;_AddMapping('abrirAplicacion', 'AppMainWindow');
$this-&gt;_AddForward('abrirAplicacion', 'gvHidraOpenApp', 'index.php?view=igep/views/aplicacion.php');
$this-&gt;_AddForward('abrirAplicacion', 'gvHidraCloseApp', 'index.php?view=igep/views/gvHidraCloseApp.php'); 

//Accion que se ejecuta al cerrar
$this-&gt;_AddMapping('cerrarAplicacion', 'AppMainWindow');
$this-&gt;_AddForward('cerrarAplicacion', 'gvHidraCloseApp', 'index.php?view=igep/views/gvHidraCloseApp.php');</pre>
                             </div>
                        
               </div>
               
                     
               <div class="section" title="3.1.2.3. Definir listas y ventanas de selecci&oacute;n">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e943"></a>3.1.2.3. Definir listas y ventanas de selecci&oacute;n
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Para poder a&ntilde;adir listas (gvHidraList) o ventanas de seleccion
                             (gvHidraSelecctionWindow) a nuestras aplicaciones necesitamos
                             definirlas en el constructor de esta clase. Hay m&aacute;s informaci&oacute;n al
                             respecto en el apartado de las listas
                  </p>
                        
               </div>
               
                     
               <div class="section" title="3.1.2.4. Informaci&oacute;n global">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e946"></a>3.1.2.4. Informaci&oacute;n global
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Si se usan informaciones globales que no se tienen disponibles a
                             trav&eacute;s del patr&oacute;n singleton, podemos usar los m&eacute;todos
                             guardaVariableGlobal y dameVariableGlobal de IgepSession para
                             manejarlas. El constructor de AppMainWindow es el sitio natural donde
                             inicializar los valores, para luego poder recuperarlos en cualquier
                             parte de la aplicaci&oacute;n.
                  </p>
                        
               </div>
                   
            </div>
            
                
            <div class="section" title="3.1.3. Recomendaciones">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e949"></a>3.1.3. Recomendaciones
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>En este apartado vamos a citar algunas de las recomendaciones que,
                        aunque no son de obligado cumplimiento, si que nos pueden ser de gran
                        utilidad ya que vienen recogidas de la experiencia de los
                        desarrolladores.
               </p>
               
                     
               <div class="section" title="3.1.3.1. Antes de arrancar">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e952"></a>3.1.3.1. Antes de arrancar
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <div class="section" title="3.1.3.1.1. Configuraci&oacute;n para desarrollo">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e954"></a>3.1.3.1.1. Configuraci&oacute;n para desarrollo
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>gvHIDRA utiliza una serie de proyectos por debajo para
                                  implementar la arquitectura MVC y representar la vista.
                                  Concretamente phrame y a smarty. Estos dos proyectos tienen una
                                  serie de par&aacute;metros de configuraci&oacute;n que interesa tener en cuenta a
                                  la hora de trabajar en una aplicaci&oacute;n. L&oacute;gicamente no es lo mismo
                                  estar en un entorno de desarrollo que en un entorno de explotaci&oacute;n,
                                  por ello conviene tener en cuenta cuando estamos en uno u otro para
                                  realizar la configuraci&oacute;n adecuada.
                     </p>
                     
                               
                     <p>Todo ello se resume en estas dos propiedades del fichero
                                  gvHidraConf.xml a nivel de aplicaci&oacute;n:
                     </p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="disc">
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>reloadMappings</strong></span>: esta
                                               propiedad que admite valores boolenos(true|false), indica si el
                                               framework debe recargar el mapeo de acciones en cada iteracci&oacute;n.
                                               Esto es conveniente en desarrollo, aunque ralentiza la
                                               ejecuci&oacute;n.<span class="emphasis"><em> En explotaci&oacute;n esta propiedad debe estar a
                                                     false.</em></span></p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p><span class="bold"><strong>smartyCompileCheck</strong></span>: esta
                                               propiedad que admite valores boolenos(true|false), indica si
                                               regeneramos la plantilla (tpl) en cada interacci&oacute;n. En fase de
                                               desarrollo, como cambiamos constantemente la pantalla, es
                                               conveniente que est&eacute; a true. <span class="emphasis"><em>En explotaci&oacute;n esta
                                                     propiedad debe estar a false</em></span> para mejorar el
                                               rendimiento.
                              </p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.1.2. Codificaci&oacute;n">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e967"></a>3.1.3.1.2. Codificaci&oacute;n
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>El framework est&aacute; en la codificaci&oacute;n <span class="bold"><strong>ISO-8859-1 (Latin1)</strong></span>, por lo que el IDE que
                                  utilicemos para programar, debemos configurarlo en esta
                                  codificaci&oacute;n. Con ello evitaremos problemas con caracteres
                                  especiales. En el caso de las conexiones a BBDD, si utilizamos
                                  Oracle, debemos de definir la variable de entorno
                                  NLS_LANG=Spanish_Spain.WE8ISO8859P. En el resto no es necesario
                                  hacer nada.
                     </p>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.1.3. Separar clases manejadoras por m&oacute;dulos">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e971"></a>3.1.3.1.3. Separar clases manejadoras por m&oacute;dulos
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>Es una buena pr&aacute;ctica, crear carpetas dentro de los
                                  directorios actions, views y plantillas con los nombres de los
                                  m&oacute;dulos de la aplicaci&oacute;n. Con esta sencilla separaci&oacute;n f&iacute;sica de los
                                  ficheros, ser&aacute; m&aacute;s sencillo localizar la informaci&oacute;n de un caso de
                                  uso concreto. Un ejemplo de m&oacute;dulos podr&iacute;a ser:
                     </p>
                     
                               
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="disc">
                           <li class="listitem">
                                            
                              <p>Mantenimiento expedientes</p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p>Tablas maestras</p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p>Listados</p>
                                          
                           </li>
                           <li class="listitem">
                                            
                              <p>...</p>
                                          
                           </li>
                        </ul>
                     </div>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.1.4. Manual de Usuario Gu&iacute;a de Estilo">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e983"></a>3.1.3.1.4. Manual de Usuario Gu&iacute;a de Estilo
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>Aunque no es obligatorio, siempre conviene tener una gu&iacute;a para
                                  horientar a nuestros usuarios en el uso de las aplicaciones. Esta
                                  opci&oacute;n, abre una ventana emergente donde se explica el
                                  funcionamiento general de los distintos elementos de las
                                  aplicaciones realizadas con gvHIDRA. Se recomienda colocar en el
                                  men&uacute; de herramientas o de administraci&oacute;n.
                     </p>
                     
                               
                     <div class="informalexample">
                                    
                        
                                    <pre class="programlisting">
&lt;opcion titulo="Manual Gu&iacute;a de Estilo" descripcion="Manual de introducci&oacute;n a Gu&iacute;a de Estilo"
 url="igep/doc/manualIGEP/indice/indice.html" imagen="menu/24.gif"
/&gt;</pre>
                                  </div>
                     
                               
                     <p>Tambi&eacute;n hay disponible una gu&iacute;a r&aacute;pida:</p>
                     
                               
                     <div class="informalexample">
                                    
                        
                                    <pre class="programlisting">
&lt;opcion titulo="Gu&iacute;a R&aacute;pida" descripcion="Gu&iacute;a
      r&aacute;pida uso de aplicaciones"
      url="igep/custom/cit.gva.es/doc/guiaRapida/guiaRapidaUsoAplicacionesCIT.pdf"
      abrirVentana='true' imagen="menu/24.gif" /&gt;</pre>
                                  </div>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.1.5. Acerca de...">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e991"></a>3.1.3.1.5. Acerca de...
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>De forma autom&aacute;tica, el framework ofrece la posibilidad de
                                  crear un menu Acerca de que muestra el acr&oacute;nimo y el nombre de la
                                  aplicaci&oacute;n as&iacute; como sus versiones. Para mostrarlo debemos a&ntilde;adir la
                                  siguente opci&oacute;n de men&uacute;:
                     </p>
                     
                               
                     <div class="informalexample">
                                    
                        
                                    <pre class="programlisting">
&lt;opcion titulo="Acerca de..." 
 url="about" imagen="menu/24.gif"
/&gt;</pre>
                                  </div>
                     
                               
                     <p>Al pulsar sobre esta opci&oacute;n el usario se encontrar&aacute; con una
                                  pantalla similar a esta:
                     </p>
                     
                               
                     <div class="mediaobject" align="center"><img src="images/acercade.png" align="middle"></div>
                             
                  </div>
                        
               </div>
               
                     
               <div class="section" title="3.1.3.2. Programando...">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e1000"></a>3.1.3.2. Programando...
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <div class="section" title="3.1.3.2.1. Consola de Log o Debug de la aplicaci&oacute;n">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e1002"></a>3.1.3.2.1. Consola de Log o Debug de la aplicaci&oacute;n
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>Es una de las utilidades del framework b&aacute;sicas. Con el
                                  siguiente c&oacute;digo se abre una ventana emergente para consultar la
                                  informaci&oacute;n generada por la aplicaci&oacute;n. Se recomienda colocar en el
                                  men&uacute; de herramientas, y con control de acceso para que no est&eacute;
                                  accesible a usuarios.
                     </p>
                     
                               
                     <div class="informalexample">
                                    
                        
                                    <pre class="programlisting">
&lt;opcion titulo="Log Aplicaci&oacute;n" descripcion="Log Aplicaci&oacute;n" 
        url="igep/_debugger.php" abrirVentana="true" imagen="menu/mensajes.gif"&gt;
    &lt;controlAcceso&gt;
        ...
    &lt;/controlAcceso&gt;
&lt;/opcion&gt;</pre>
                                  </div>
                     
                               
                     <div class="mediaobject" align="center"><img src="images/gvHidraDebbuger.png" align="middle"></div>
                     
                               
                     <p>M&aacute;s adelante explicaremos en profundidad el log del framework
                                  y sus posibilidades a modo de depuraci&oacute;n y auditor&iacute;a.
                     </p>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.2.2. Herramientas para facilitar la depuraci&oacute;n.">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e1011"></a>3.1.3.2.2. Herramientas para facilitar la depuraci&oacute;n.
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>Adem&aacute;s del propio debugger de la aplicaci&oacute;n interesa
                                  instalarse alguna herramienta que nos permita ver el frame oculto
                                  del c&oacute;digo HTML generado. Esto se debe a que, internamente, gvHIDRA
                                  trabaja con un frame que no es visible por el usuario, lo cual le
                                  permite, por ejemplo, realizar acciones sin recargar la p&aacute;gina. Por
                                  todo ello, para la depuraci&oacute;n, es fundamental instalar una
                                  herramienta que nos permita ver el contenido de dicho frame; en el
                                  caso de errores cr&iacute;ticos, puede que s&oacute;lo aparezcan en &eacute;l.
                     </p>
                     
                               
                     <p>Nosotros utilizamos el complemento de firefox HTML Validator,
                                  pero existen otras posibilidades. Aqu&iacute; ten&eacute;is una imagen del
                                  plugin.
                     </p>
                     
                               
                     <div class="mediaobject" align="center"><img src="images/tidy_tooltip_04.png" align="middle"></div>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.2.3. Problemas con el constructor de una clase">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e1018"></a>3.1.3.2.3. Problemas con el constructor de una clase
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>El framework tiene un sistema de persistencia de las clases
                                  manejadoras que permite, de forma transparente para el programador,
                                  mantener "viva" la instancia de una clase hasta que se cierre la
                                  ventana. Esto significa que, cuando se cierra una ventana y cuando
                                  se cierra la aplicaci&oacute;n (a trav&eacute;s de los iconos indicados), se
                                  borrar&aacute;n de la sesi&oacute;n los datos de dicha clase. Es importante tener
                                  esto en cuenta porque si tenemos un error en el constructor,
                                  deberemos borrar la sesi&oacute;n antes de volver a ejecutar, ya que el
                                  constructor s&oacute;lo se ejecuta la primera vez que entras a la
                                  ventana.
                     </p>
                             
                  </div>
                  
                          
                  <div class="section" title="3.1.3.2.4. Proteger contrase&ntilde;as">
                     <div class="titlepage">
                        <div>
                           <div>
                              <h5 class="title"><a name="d4e1021"></a>3.1.3.2.4. Proteger contrase&ntilde;as
                              </h5>
                           </div>
                        </div>
                     </div>
                               
                     
                               
                     <p>Se trata de una utilidad. Abre una ventana emergente donde
                                  podemos obtener el hash de una cadena (usados en servidores de web
                                  services). Se recomienda colocar en el men&uacute; de herramientas, y con
                                  control de acceso para que no est&eacute; accesible a usuarios.
                     </p>
                     
                               
                     <div class="informalexample">
                                    
                        
                                    <pre class="programlisting">
&lt;opcion titulo="Proteger datos usando hash" descripcion="Proteger datos usando hash" 
        url="igep/include/igep_utils/protectdata.php" abrirVentana="true" imagen="menu/seguridad.gif"&gt;
    &lt;controlAcceso&gt;
        ...
    &lt;/controlAcceso&gt;
&lt;/opcion&gt; </pre>
                                  </div>
                             
                  </div>
                        
               </div>
                   
            </div>
              
         </div>
         
           
         
           
         
           
         
           
         
           
         
           
         
           
         
           
         
           
         
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="Parte_2.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="Parte_2.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">Parte&nbsp;II.&nbsp;Elementos de gvHidra&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;3.2. Breve gu&iacute;a para crear una pantalla</td>
            </tr>
         </table>
      </div>
   </body>
</html>